'use strict'
const http =require('http')//require 可以在程序运行时动态的导入模块
/*
*.jpg .jpeg ->image/jpeg
*.png ->image/png
*gif ->image/gif
*.ico ->image/x-icon
*.txt ->text/plain
*.json ->text.json 或application/json
*.xml ->text.xml 或application/xml
*
*/
let html = `
<!DOCTYPE html>
<html>
    <head>
        <title>First HTTP</title>
    </head>
    <body>
      你好。
    </body>
</html>
`

let routerTable = {
    '/':async(request,response)=>{
        response.setHeader('content-type','text/html;charset=utf-8')
        response.end(html)
    },
    '/test':async(request,response)=>{
        let status =parseInt(Math.random() * 200)+199
        response.statusCode = status
        response.end('test end')
    },
    '/data':async(request,response)=>{
        let bufferList = []
        let bufferLength = 0
        request.on('data', chunk => {
            bufferLength += chunk.length
            bufferList.push(chunk)
        })
        let bodyData = null
        request.on('end', () => {
            if (bufferList.length > 0) {
                bodyData = Buffer.concat(bufferList, bufferLength)
                bufferList = []
            }
            if (bodyData) {
                response.end(bodyData)
            } else {
                response.end()
            }
        })

    }
}

http.createServer((request,response)=>{
    if(!routerTable[request.url]){
        response.statusCode = 404
        response.end('page not found')
        return
    }
    routerTable[request.url ](request,response)
})
.listen(3456)
